package Datos;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.CallableStatement;
import java.util.*;

public class NoGarantizado {
	//Sesion oSesion;
	
	public NoGarantizado(){};
	
	public int Add(Entidades.NoGarantizado item) throws Exception{
		try{
			Datos.CPD unCPD = new Datos.CPD();
			CallableStatement cs = unCPD.Add(item);
			poneDatos(item,cs);
			boolean pipi = cs.execute();
			int numero = 0;
			if (pipi) numero = 1;
			return numero;
		} catch (Exception ex){
			   System.out.println("SQLException: " + ex.getMessage());
			   return -1;
		}
	}
	public void Update(Entidades.NoGarantizado item) throws Exception{
		try{
			Datos.CPD unCPD = new Datos.CPD();
			CallableStatement cs = unCPD.Update(item);
			poneDatos(item,cs);
			boolean pipi = cs.execute();
			System.out.println("Resultado booleano: " + pipi);
			return;
		} catch (Exception ex){
			   System.out.println("SQLException: " + ex.getMessage());
		}
	}

	private void poneDatos(Entidades.NoGarantizado item, CallableStatement cs){
		try{
			cs.setDouble("mNroCheque", item.getNroCheque());
			cs.setDouble("mNroCtaLibrador", item.getNroCtaLibrador());
			cs.setInt("mIdBanco", item.getSucursal().getBanco().getIdBanco());
			cs.setInt("mIdSucursal", item.getSucursal().getIdSucursal());
			//cs.setInt("mTipCPD", 3);
		} catch (Exception ex){
			   System.out.println("SQLException: " + ex.getMessage());
		}
	}
	/**
	 * Extrae los Datos del ResultSet leido en CPD y lo transforma en una Instancia
	 * de CPD NoGarantizado
	 * @param rs
	 * @param oComitente
	 * @param oPlaza
	 * @param oSegmento
	 * @param oDatos
	 * @return
	 */
	public List sacaDatos(ResultSet rs, Entidades.Comitente oComitente, 
			Entidades.Plaza oPlaza, Entidades.Segmento oSegmento, List oDatos){
		try{
			Entidades.NoGarantizado oNoGarantizado = null;
			List oSucursales = new ArrayList();
			Entidades.Sucursal oSucursal = null;
			int mIdBanco	= rs.getInt(12);
			int mIdSucursal = rs.getInt(13);
			oSucursales = new Datos.Sucursal().GetOne(mIdSucursal, mIdBanco);
			while(!oSucursales.isEmpty()){
				oSucursal = (Entidades.Sucursal) oSucursales.remove(0);
			}
			Entidades.NoGarantizado oDato = null;
			oDato = new Entidades.NoGarantizado(
					rs.getDouble(1),
					rs.getString(8),
					rs.getDate(2),
					rs.getDate(3),
					rs.getDate(4),
					rs.getDate(5),
					rs.getFloat(6),
					oPlaza,
					rs.getDouble(9),
					rs.getDouble(10),
					rs.getDouble(11),
					oSucursal,
					oComitente,
					oSegmento
					);
			oDatos.add(oDato);
			oDato = null;
		} catch (Exception ex) {
			System.out.println("SQLException: " + ex.getMessage());
		}
		return oDatos;
	}
	public List Primero(Sesion oSesion) throws Exception{
		return new Datos.CPD().Trae("FIRST WHERE `tipCPD` = 3", oSesion);
	}
	public List Siguiente(Sesion oSesion) throws Exception{
		return new Datos.CPD().Trae("NEXT WHERE `tipCPD` = 3", oSesion);
	}
	public List Anterior(Sesion oSesion) throws Exception{
		return new Datos.CPD().Trae("PREV WHERE `tipCPD` = 3", oSesion);
	}
	public List Ultimo(Sesion oSesion) throws Exception{
		return new Datos.CPD().Trae("LAST WHERE `tipCPD` = 3", oSesion);
	}
	public Sesion Abrir() throws Exception{
		return new Datos.CPD().Abrir();
		/*
		oSesion = new Sesion();
		try{
			String sql = "HANDLER `CPD` OPEN";
			oSesion.getSesion().executeQuery(sql);
		} catch (Exception ex){
			System.out.println("SQLException: " + ex.getMessage());
		}
		*/
	}
	public void Cerrar(Sesion oSesion) throws Exception{
		new Datos.CPD().Cerrar(oSesion);
		/*
		try{
			String sql = "HANDLER `CPD` CLOSE";
			oSesion.getSesion().executeQuery(sql);
		} catch (Exception ex){
			System.out.println("SQLException: " + ex.getMessage());
		}
		*/
	}


}
